home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / TUTORIAL.BIN / Plasma.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-16  |  5.3 KB  |  274 lines

  1. package symantec.itools.multimedia;
  2.  
  3. import java.awt.Canvas;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Graphics;
  7. import java.awt.Image;
  8. import java.awt.image.ImageObserver;
  9. import java.awt.image.IndexColorModel;
  10. import java.awt.image.MemoryImageSource;
  11. import symantec.beans.Beans;
  12. import symantec.itools.lang.OS;
  13.  
  14. public class Plasma extends Canvas implements Runnable {
  15.    int[] xpoints = new int[5];
  16.    int[] ypoints = new int[5];
  17.    byte[] red = new byte[128];
  18.    byte[] green = new byte[128];
  19.    byte[] blue = new byte[128];
  20.    byte[] buffer;
  21.    byte[] costab;
  22.    Dimension dim;
  23.    IndexColorModel cModel;
  24.    Image img;
  25.    // $FF: renamed from: x1 byte
  26.    byte field_0;
  27.    // $FF: renamed from: x2 byte
  28.    byte field_1;
  29.    // $FF: renamed from: y1 byte
  30.    byte field_2;
  31.    // $FF: renamed from: y2 byte
  32.    byte field_3;
  33.    byte x1mod = 6;
  34.    byte x2mod = 8;
  35.    byte y1mod = 6;
  36.    byte y2mod = 4;
  37.    boolean keepGoing = true;
  38.    boolean suspended = false;
  39.    boolean stopThread = false;
  40.    boolean Threadstopped = false;
  41.    Thread displayThread;
  42.    private boolean previewMode = false;
  43.    private int iteration;
  44.    private final int MAX_ITERATION_GC = 25;
  45.  
  46.    public Plasma() {
  47.       this.dopalette();
  48.       this.cModel = new IndexColorModel(7, 128, this.red, this.green, this.blue);
  49.       this.costab = new byte[256];
  50.       this.setupcos();
  51.       this.createBuffer();
  52.    }
  53.  
  54.    void createBuffer() {
  55.       this.dim = ((Component)this).size();
  56.       this.buffer = new byte[this.dim.width * (this.dim.height + 100)];
  57.       this.img = null;
  58.    }
  59.  
  60.    public synchronized void addNotify() {
  61.       super.addNotify();
  62.       this.displayThread = new Thread(this);
  63.       this.displayThread.setPriority(1);
  64.       this.displayThread.start();
  65.    }
  66.  
  67.    public synchronized void removeNotify() {
  68.       this.keepGoing = false;
  69.       this.stopThread = false;
  70.       if (this.displayThread != null) {
  71.          this.displayThread.setPriority(10);
  72.          this.displayThread.resume();
  73.       }
  74.  
  75.       while(this.displayThread != null) {
  76.          try {
  77.             Thread.sleep(40L);
  78.          } catch (Exception var1) {
  79.          }
  80.       }
  81.  
  82.       super.removeNotify();
  83.    }
  84.  
  85.    public void startPlasma() {
  86.       this.suspended = false;
  87.       this.show();
  88.    }
  89.  
  90.    public void stopPlasma() {
  91.       this.suspended = true;
  92.    }
  93.  
  94.    public synchronized void show() {
  95.       if (this.displayThread != null) {
  96.          if (this.stopThread) {
  97.             this.stopThread = false;
  98.             return;
  99.          }
  100.  
  101.          this.displayThread.setPriority(10);
  102.          this.displayThread.resume();
  103.       }
  104.  
  105.    }
  106.  
  107.    public synchronized void hide() {
  108.       if (!this.Threadstopped) {
  109.          this.stopThread = true;
  110.          this.displayThread.setPriority(10);
  111.       }
  112.  
  113.    }
  114.  
  115.    public synchronized void reshape(int var1, int var2, int var3, int var4) {
  116.       super.reshape(var1, var2, var3, var4);
  117.       this.createBuffer();
  118.    }
  119.  
  120.    public void setPreviewMode(boolean var1) {
  121.       this.previewMode = var1;
  122.       ((Component)this).invalidate();
  123.    }
  124.  
  125.    public boolean getPreviewMode() {
  126.       return this.previewMode;
  127.    }
  128.  
  129.    public void run() {
  130.       while(this.keepGoing) {
  131.          if (!this.stopThread && !this.suspended && (this.previewMode || !Beans.isDesignTime())) {
  132.             ((Component)this).repaint();
  133.          }
  134.  
  135.          if (this.stopThread) {
  136.             super.hide();
  137.             this.Threadstopped = true;
  138.             this.displayThread.setPriority(1);
  139.             this.displayThread.suspend();
  140.             this.Threadstopped = false;
  141.             if (this.keepGoing) {
  142.                super.show();
  143.                this.displayThread.setPriority(1);
  144.             }
  145.          } else if (this.keepGoing) {
  146.             try {
  147.                Thread.sleep(100L);
  148.             } catch (Exception var1) {
  149.             }
  150.          }
  151.       }
  152.  
  153.       this.displayThread = null;
  154.    }
  155.  
  156.    public void paint(Graphics var1) {
  157.       if (!this.suspended && (this.previewMode || !Beans.isDesignTime())) {
  158.          this.moveplasma();
  159.       }
  160.  
  161.       if (this.img == null) {
  162.          this.drawplasma();
  163.  
  164.          try {
  165.             this.img = ((Component)this).createImage(new MemoryImageSource(this.dim.width, this.dim.height, this.cModel, this.buffer, 0, this.dim.width));
  166.          } catch (Exception var2) {
  167.          }
  168.       }
  169.  
  170.       if (OS.isMacintosh()) {
  171.          var1.clipRect(0, 0, this.dim.width, this.dim.height);
  172.       }
  173.  
  174.       var1.drawRect(0, 0, this.dim.width - 1, this.dim.height - 1);
  175.       var1.clipRect(1, 1, this.dim.width - 2, this.dim.height - 2);
  176.       if (this.img != null) {
  177.          if (OS.isMacintosh()) {
  178.             var1.drawImage(this.img, 1, 1, (ImageObserver)null);
  179.          } else {
  180.             var1.drawImage(this.img, 1, 1, this);
  181.          }
  182.       }
  183.  
  184.       if (++this.iteration > 25) {
  185.          System.gc();
  186.          this.iteration = 0;
  187.       }
  188.  
  189.    }
  190.  
  191.    public void update(Graphics var1) {
  192.       this.paint(var1);
  193.    }
  194.  
  195.    public void drawplasma() {
  196.       char var5 = (char)this.field_2;
  197.       char var6 = (char)this.field_3;
  198.  
  199.       for(int var2 = 0; var2 < this.dim.height * this.dim.width; var2 += this.dim.width + this.dim.width + this.dim.width) {
  200.          char var3 = (char)this.field_0;
  201.          char var4 = (char)this.field_1;
  202.  
  203.          for(int var1 = 0; var1 < this.dim.width; var1 += 4) {
  204.             this.buffer[var1 + var2] = (byte)(this.costab[var3 & 255] + this.costab[var4 & 255] + this.costab[var5 & 255] + this.costab[var6 & 255]);
  205.             this.buffer[var1 + var2 + 1] = this.buffer[var1 + var2];
  206.             this.buffer[var1 + var2 + 2] = this.buffer[var1 + var2];
  207.             this.buffer[var1 + var2 + 3] = this.buffer[var1 + var2];
  208.             this.buffer[var1 + var2 + this.dim.width] = this.buffer[var1 + var2];
  209.             this.buffer[var1 + var2 + this.dim.width + 1] = this.buffer[var1 + var2];
  210.             this.buffer[var1 + var2 + this.dim.width + 2] = this.buffer[var1 + var2];
  211.             this.buffer[var1 + var2 + this.dim.width + 3] = this.buffer[var1 + var2];
  212.             this.buffer[var1 + var2 + this.dim.width + this.dim.width] = this.buffer[var1 + var2];
  213.             this.buffer[var1 + var2 + this.dim.width + this.dim.width + 1] = this.buffer[var1 + var2];
  214.             this.buffer[var1 + var2 + this.dim.width + this.dim.width + 2] = this.buffer[var1 + var2];
  215.             this.buffer[var1 + var2 + this.dim.width + this.dim.width + 3] = this.buffer[var1 + var2];
  216.             var3 = (char)(var3 + this.x1mod);
  217.             var4 = (char)(var4 + this.x2mod);
  218.          }
  219.  
  220.          var5 = (char)(var5 + this.y1mod);
  221.          var6 = (char)(var6 + this.y2mod);
  222.       }
  223.  
  224.    }
  225.  
  226.    public void moveplasma() {
  227.       this.field_0 = (byte)(this.field_0 - this.x1mod * 2);
  228.       this.field_2 = (byte)(this.field_2 + this.y1mod * 2);
  229.       this.field_0 += (byte)((int)(Math.random() * (double)3.0F));
  230.       this.field_1 -= (byte)((int)(Math.random() * (double)4.0F));
  231.       this.field_2 += (byte)((int)(Math.random() * (double)3.0F));
  232.       this.field_3 -= (byte)((int)(Math.random() * (double)5.0F));
  233.       if (this.img != null) {
  234.          this.img.flush();
  235.       }
  236.  
  237.       this.img = null;
  238.    }
  239.  
  240.    public void dopalette() {
  241.       for(int var1 = 0; var1 < 32; ++var1) {
  242.          this.red[var1] = -1;
  243.          this.green[var1] = 0;
  244.          this.blue[var1] = (byte)(var1 * 8);
  245.       }
  246.  
  247.       for(int var2 = 32; var2 < 96; ++var2) {
  248.          this.red[var2] = (byte)(255 - var2 * 8);
  249.          this.green[var2] = (byte)(var2 * 8);
  250.          this.blue[var2] = -1;
  251.       }
  252.  
  253.       for(int var3 = 64; var3 < 96; ++var3) {
  254.          this.red[var3] = 0;
  255.          this.green[var3] = -1;
  256.          this.blue[var3] = (byte)(255 - var3 * 8);
  257.       }
  258.  
  259.       for(int var4 = 96; var4 < 128; ++var4) {
  260.          this.red[var4] = (byte)(var4 * 8);
  261.          this.green[var4] = (byte)(255 - var4 * 8);
  262.          this.blue[var4] = 0;
  263.       }
  264.  
  265.    }
  266.  
  267.    public void setupcos() {
  268.       for(int var1 = 0; var1 < 256; ++var1) {
  269.          this.costab[var1] = (byte)((int)((double)16.0F + Math.cos((double)var1 * (double)360.0F / (double)255.0F / (double)180.0F * Math.PI) * (double)15.0F));
  270.       }
  271.  
  272.    }
  273. }
  274.